home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / Python1.4_Source / Include / opcode.h < prev    next >
C/C++ Source or Header  |  1998-06-24  |  5KB  |  160 lines

  1. #ifndef Py_OPCODE_H
  2. #define Py_OPCODE_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6.  
  7. /***********************************************************
  8. Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
  9. The Netherlands.
  10.  
  11.                         All Rights Reserved
  12.  
  13. Permission to use, copy, modify, and distribute this software and its
  14. documentation for any purpose and without fee is hereby granted,
  15. provided that the above copyright notice appear in all copies and that
  16. both that copyright notice and this permission notice appear in
  17. supporting documentation, and that the names of Stichting Mathematisch
  18. Centrum or CWI or Corporation for National Research Initiatives or
  19. CNRI not be used in advertising or publicity pertaining to
  20. distribution of the software without specific, written prior
  21. permission.
  22.  
  23. While CWI is the initial source for this software, a modified version
  24. is made available by the Corporation for National Research Initiatives
  25. (CNRI) at the Internet address ftp://ftp.python.org.
  26.  
  27. STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH
  28. REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
  29. MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH
  30. CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
  31. DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
  32. PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  33. TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
  34. PERFORMANCE OF THIS SOFTWARE.
  35.  
  36. ******************************************************************/
  37.  
  38. /* Instruction opcodes for compiled code */
  39.  
  40. #define STOP_CODE    0
  41. #define POP_TOP        1
  42. #define ROT_TWO        2
  43. #define ROT_THREE    3
  44. #define DUP_TOP        4
  45.  
  46. #define UNARY_POSITIVE    10
  47. #define UNARY_NEGATIVE    11
  48. #define UNARY_NOT    12
  49. #define UNARY_CONVERT    13
  50.  
  51. #define UNARY_INVERT    15
  52.  
  53. #define BINARY_POWER    19
  54.  
  55. #define BINARY_MULTIPLY    20
  56. #define BINARY_DIVIDE    21
  57. #define BINARY_MODULO    22
  58. #define BINARY_ADD    23
  59. #define BINARY_SUBTRACT    24
  60. #define BINARY_SUBSCR    25
  61.  
  62. #define SLICE        30
  63. /* Also uses 31-33 */
  64.  
  65. #define STORE_SLICE    40
  66. /* Also uses 41-43 */
  67.  
  68. #define DELETE_SLICE    50
  69. /* Also uses 51-53 */
  70.  
  71. #define STORE_SUBSCR    60
  72. #define DELETE_SUBSCR    61
  73.  
  74. #define BINARY_LSHIFT    62
  75. #define BINARY_RSHIFT    63
  76. #define BINARY_AND    64
  77. #define BINARY_XOR    65
  78. #define BINARY_OR    66
  79.  
  80.  
  81. #define PRINT_EXPR    70
  82. #define PRINT_ITEM    71
  83. #define PRINT_NEWLINE    72
  84.  
  85. #define BREAK_LOOP    80
  86.  
  87. #define LOAD_LOCALS    82
  88. #define RETURN_VALUE    83
  89.  
  90. #define EXEC_STMT    85
  91.  
  92. #define POP_BLOCK    87
  93. #define END_FINALLY    88
  94. #define BUILD_CLASS    89
  95.  
  96. #define HAVE_ARGUMENT    90    /* Opcodes from here have an argument: */
  97.  
  98. #define STORE_NAME    90    /* Index in name list */
  99. #define DELETE_NAME    91    /* "" */
  100. #define UNPACK_TUPLE    92    /* Number of tuple items */
  101. #define UNPACK_LIST    93    /* Number of list items */
  102. #define UNPACK_ARG    94    /* Number of arguments */
  103. #define STORE_ATTR    95    /* Index in name list */
  104. #define DELETE_ATTR    96    /* "" */
  105. #define STORE_GLOBAL    97    /* "" */
  106. #define DELETE_GLOBAL    98    /* "" */
  107. #define UNPACK_VARARG    99    /* Minimal number of arguments */
  108.  
  109. #define LOAD_CONST    100    /* Index in const list */
  110. #define LOAD_NAME    101    /* Index in name list */
  111. #define BUILD_TUPLE    102    /* Number of tuple items */
  112. #define BUILD_LIST    103    /* Number of list items */
  113. #define BUILD_MAP    104    /* Always zero for now */
  114. #define LOAD_ATTR    105    /* Index in name list */
  115. #define COMPARE_OP    106    /* Comparison operator */
  116. #define IMPORT_NAME    107    /* Index in name list */
  117. #define IMPORT_FROM    108    /* Index in name list */
  118. #define ACCESS_MODE    109    /* Name (mode is int on top of stack) */
  119.  
  120. #define JUMP_FORWARD    110    /* Number of bytes to skip */
  121. #define JUMP_IF_FALSE    111    /* "" */
  122. #define JUMP_IF_TRUE    112    /* "" */
  123. #define JUMP_ABSOLUTE    113    /* Target byte offset from beginning of code */
  124. #define FOR_LOOP    114    /* Number of bytes to skip */
  125.  
  126. #define LOAD_LOCAL    115    /* Index in name list */
  127. #define LOAD_GLOBAL    116    /* Index in name list */
  128.  
  129. #define SET_FUNC_ARGS    117    /* Argcount */
  130.  
  131. #define SETUP_LOOP    120    /* Target address (absolute) */
  132. #define SETUP_EXCEPT    121    /* "" */
  133. #define SETUP_FINALLY    122    /* "" */
  134.  
  135. #define LOAD_FAST    124    /* Local variable number */
  136. #define STORE_FAST    125    /* Local variable number */
  137. #define DELETE_FAST    126    /* Local variable number */
  138.  
  139. #define SET_LINENO    127    /* Current line number */
  140.  
  141. /* It used to be the case that opcodes should fit in 7 bits.  This is
  142.    no longer the case -- 8 bits is fine (the instruction stream is now
  143.    a sequence of unsigned characters).  We gladly use the new space
  144.    for new opcodes. */
  145.  
  146. #define RAISE_VARARGS    130    /* Number of raise arguments (1, 2 or 3) */
  147. #define CALL_FUNCTION    131    /* #args + (#kwargs<<8) */
  148. #define MAKE_FUNCTION    132    /* #defaults */
  149. #define BUILD_SLICE     133    /* Number of items */
  150.  
  151. /* Comparison operator codes (argument to COMPARE_OP) */
  152. enum cmp_op {LT, LE, EQ, NE, GT, GE, IN, NOT_IN, IS, IS_NOT, EXC_MATCH, BAD};
  153.  
  154. #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
  155.  
  156. #ifdef __cplusplus
  157. }
  158. #endif
  159. #endif /* !Py_OPCODE_H */
  160.